package com.allen.study.application.api.assembler.mapper;

import com.allen.study.application.api.request.LeaveApplyCreateRequest;
import com.allen.study.application.api.request.LeaveApplyQueryRequest;
import com.allen.study.application.api.request.LeaveApplyUpdateRequest;
import com.allen.study.application.api.response.LeaveApplyQueryResponse;
import com.allen.study.application.api.response.LeaveApplyResponse;
import com.allen.study.domain.entity.LeaveApply;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 请假申请表数据传输对象结构映射
 *
 * @author AllenSun
 * @since 2025-04-23 20:46
 */
@Mapper
public interface ILeaveApplyDTOStructMapper {

    /**
     * 请假申请表数据传输对象结构映射实例
     */
    ILeaveApplyDTOStructMapper INSTANCE = Mappers.getMapper(ILeaveApplyDTOStructMapper.class);

    /**
     * 请假申请表创建请求数据传输对象 转 请假申请表实体
     *
     * @param createRequest 请假申请表创建请求数据传输对象
     * @return 请假申请表实体
     */
    LeaveApply fromCreateRequest(LeaveApplyCreateRequest createRequest);

    /**
     * 请假申请表更新请求数据传输对象 转 请假申请表实体
     *
     * @param updateRequest 请假申请表更新请求数据传输对象
     * @return 请假申请表实体
     */
    LeaveApply fromUpdateRequest(LeaveApplyUpdateRequest updateRequest);

    /**
     * 请假申请表查询请求数据传输对象 转 请假申请表实体
     *
     * @param queryRequest 请假申请表查询请求数据传输对象
     * @return 请假申请表实体
     */
    LeaveApply fromQueryRequest(LeaveApplyQueryRequest queryRequest);

    /**
     * 请假申请表实体 转 请假申请表响应数据传输对象
     *
     * @param leaveApply 请假申请表实体
     * @return 请假申请表响应数据传输对象
     */
    LeaveApplyResponse toResponse(LeaveApply leaveApply);

    /**
     * 请假申请表实体 转 请假申请表查询响应数据传输对象
     *
     * @param leaveApply 请假申请表实体
     * @return 请假申请表查询响应数据传输对象
     */
    LeaveApplyQueryResponse toQueryResponse(LeaveApply leaveApply);

    /**
     * 请假申请表实体列表 转 请假申请表查询响应数据传输对象列表
     *
     * @param leaveApplyList 请假申请表实体列表
     * @return 请假申请表查询响应数据传输对象列表
     */
    List<LeaveApplyQueryResponse> toQueryResponse(List<LeaveApply> leaveApplyList);
}
